Accessing a File I/O Buffer

The following example accesses an I/O buffer directly to read data from a waveform-audio file.

HMMIO    hmmio;

MMIOINFO mmioinfo;

DWORD    dwDataSize;

DWORD    dwCount;

HPSTR    hptr;

 

// Get information about the file I/O buffer.

if (mmioGetInfo(hmmio, &mmioinfo, 0))

    Error("Failed to get I/O buffer info.");

    .

    .

    .

    mmioClose(hmmio, 0);

    return;

}

 

// Read the entire file by directly reading the file I/O buffer.

// When the end of the I/O buffer is reached, advance the buffer.

 

for (dwCount = dwDataSize, hptr = lpData; dwCount  0; dwCount--)

    // Check to see if the I/O buffer must be advanced.

    if (mmioinfo.pchNext == mmioinfo.pchEndRead)

   

        if(mmioAdvance(hmmio, &mmioinfo, MMIO_READ))

       

            Error("Failed to advance buffer.");

            .

            .

            .

            mmioClose(hmmio, 0);

            return;

        }

    }

 

    // Get a character from the buffer.

    *hptr++ = *mmioinfo.pchNext++;

}

 

// End direct buffer access and close the file.

mmioSetInfo(hmmio, &mmioinfo, 0);

mmioClose(hmmio, 0);

 

When you finish accessing a file I/O buffer, call the mmioSetInfo1NJVP2N function, passing an address of the MMIOINFO7F4X5_ structure filled by the mmioGetInfo1XEWGTA function. If you wrote to the buffer, set the MMIO_DIRTY flag in the dwFlags member of the MMIOINFO structure before calling mmioSetInfo. Otherwise, the buffer will not be flushed to disk.